package com.src.xyzk_personal.EOL;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import org.ini4j.Ini;
import org.ini4j.InvalidFileFormatException;

import com.src.xyzk_personal.R;
import com.src.xyzk_personal.config.Common;
import com.src.xyzk_personal.config.Commonfunc;
import com.src.xyzk_personal.util.ConfigFileLoadUtil;

import android.content.Context;
import android.util.Log;

public class Cartype {
	private static String TAG = "Cartype";
	//其他变量
	public List<Ecu> ecus = null;
	public byte [] vin = null;	//vin码
	public byte [] pin = null;	//pin码
	public byte [] esk = null;	//ESK码
	public byte [] time = null;
	public byte [] tpms = null;
	public byte [] tcu_file = null;
	public int tcu_file_len = 0;
	public int station = -1;	//工位
	public String cartype = null; //配置代码
	public String cartype_w = null;	//写入ECU的配置代码
	public String carmode_dir = null;	//CAR类型,如GA6440,GA6441
	public String dir_dtc = null;	//dtc路径
	public String name = null;		//中文名称
	public String config = null;	//配置代码
	public String mcuConfig = null;	//电机钢印吗
	public byte [] configbyte = null;	//配置代码
	public String system = null;	//车型代码
	public String date = null;		//刷写时间
	public CheryMesInfo mesinfo = null;
	HashMap<String, Integer> map = null;
	HashMap<String, String> map_ver_str = null; //版本信息
	HashMap<String, byte[]> map_write_byte = null;	//写入数据
	HashMap<String, byte[]> map_dtcenable_byte = null;	//dtc_enable

	public Ini istep = null;
	public String box_serialnum = null;	//box序列号
	public String box_version = null;	//box版本号
	public String start_time = null;	//起始时间
	public String end_time = null;		//结束时间
	public int Result = 0;		//检测结果
	public int OptMode = 0;	//返修模式是否启用
	public byte [] PEPS=null;

	public Cartype() {
		if(Common.Debug) Log.i(TAG,"cartype初始化");
		vin = new byte[17];
		pin = new byte[4];
		esk = new byte[16];
		time = new byte[4];	//jac 4 byte
		PEPS = new byte[3];
		tpms = new byte[16];
		configbyte = new byte[256];
		tcu_file = new byte[0x410];
		map = new HashMap<String, Integer>();
		map_ver_str = new HashMap<String, String>();
		map_write_byte = new HashMap<String, byte[]>();
		map_dtcenable_byte = new HashMap<String, byte[]>();
	}
	public void clearall()
	{
		if(vin == null) return;
		Result = 0;
		OptMode = 0;
		map.clear();
		map_ver_str.clear();
		map_write_byte.clear();
		map_dtcenable_byte.clear();
		Common.CanMode  = 0;
		Arrays.fill(pin, (byte) 0);
		Arrays.fill(esk, (byte) 0);
		Arrays.fill(time, (byte) 0);
		Arrays.fill(tcu_file, (byte) 0);
		Arrays.fill(tpms, (byte) 0);
		tcu_file_len = 0;
		if(Common.Debug) Log.i(TAG,"clear all data is ok!");
	}

	public void SetCartype(String cartype, String config, Context context) {
		//clearall();
		//获取step数据
		this.cartype = cartype;
		this.carmode_dir=cartype;
		this.name = cartype;
		this.config=config;
		dir_dtc = ConfigFileLoadUtil.getInstance(context).getDirDtc(carmode_dir);

		if (carmode_dir.equals("CX62"))
		{
			String a = config.substring(0, 8);
			String b = config.substring(8, 16);
			StringBuilder flagBitStr = new StringBuilder(Long.toBinaryString(Long.valueOf(a, 16)));
			for(int i=flagBitStr.length();i<32;i++){
				flagBitStr.insert(0, "0");
			}
			StringBuilder flagBitStrb = new StringBuilder(Long.toBinaryString(Long.valueOf(b, 16)));
			for(int i=flagBitStrb.length();i<32;i++){
				flagBitStrb.insert(0, "0");
			}
			map.put("BCM", 1);
			map.put("EMS", 1);
			map.put("ICM", 1);
			if (flagBitStr.charAt(1)=='1'){
				map.put("EPB", 1);
				map.put("EPB标定", 1);
			}
			if (flagBitStr.charAt(2)=='1')
			{
				map.put("ESP", 1);
				map.put("ESP标定", 1);
			}
			if (flagBitStr.charAt(3)=='1')
			{
				map.put("ABS", 1);
			}
			if (flagBitStr.charAt(4)=='1')
			{
				map.put("TCM", 1);
			}
			if (flagBitStr.charAt(5)=='1')
			{
				map.put("EPS", 1);
			}
			if (flagBitStr.charAt(6)=='1')
			{
				map.put("IMMO", 1);
			}
			if (flagBitStr.charAt(7)=='1')
			{
				map.put("ABM", 1);
			}
			if (flagBitStr.charAt(11)=='1')
			{
				map.put("APM", 2);//集成于BCM
			}
			if (flagBitStr.charAt(12)=='1')
			{
				map.put("SAM", 1);
			}
			if (flagBitStr.charAt(14)=='1')
			{
				map.put("RRM", 1);
			}
			if (flagBitStr.charAt(15)=='1')
			{
				map.put("TPMS", 1);
			}
			if (flagBitStr.charAt(20)=='1')
			{
				map.put("PLG", 1);
			}
			if (flagBitStr.charAt(24)=='1')
			{
				map.put("PEPS", 1);
			}
			if (flagBitStr.charAt(26)=='1')
			{
				map.put("BM", 1);
				map.put("BCM", 2);//集成于PEPS
			}
			//后8个字符
			if (flagBitStrb.charAt(1)=='1')
			{
				map.put("手环学习", 1);
			}
			if (flagBitStrb.charAt(10)=='1')
			{
				map.put("TBOX", 1);
			}
			if (flagBitStrb.charAt(25)=='1')
			{
				map.put("FCW", 1);
			}
			if (flagBitStrb.charAt(26)=='1')
			{
				map.put("BSD_L", 1);
				map.put("BSD_R", 1);
			}
			if (flagBitStrb.charAt(28)=='1')
			{
				map.put("APM", 1);
			}
			if (flagBitStrb.charAt(29)=='1')
			{
				map.put("AVM", 1);
			}

			byte [] CONFIG = new byte[8];
			Commonfunc.CheryCmdStringToBytes(config,CONFIG, 16);
			map_write_byte.put("CONFIG", CONFIG);
		}
		else if (carmode_dir.equals("CX62B"))
		{
			int configlen = Commonfunc.CheryCmdStringToBytes(config,configbyte, config.length());
			//配置
			map.put("EMS", 1);
			if(Common.cartype.mesinfo.flash_ems != null)
			{
				if(Common.cartype.mesinfo.flash_ems.length() < 5)
					map.put("EMS刷写",0);
				else if(Common.cartype.mesinfo.flash_ems.indexOf("800400008027FFFF") > 0)
					map.put("EMS刷写",1);
				else
					map.put("EMS刷写",2);
			}
			else
				map.put("EMS刷写",0);
			map.put("ABM", (configbyte[0] >>> 0) & 0x01);
			map.put("IMMO", (configbyte[0] >>> 1) & 0x01);
			map.put("EPS", (configbyte[0] >>> 2) & 0x01);
			map.put("EPS标定", (configbyte[0] >>> 2) & 0x01);
			map.put("TCM", (configbyte[0] >>> 3) & 0x01);
			map.put("TCU", (configbyte[0] >>> 3) & 0x01);
			if((((configbyte[2] >>> 5) & 0x07) == 5))
			{
				map.put("DCT", 0x01);
				map.put("TCU", 0x01);
			}
			map.put("ABS", (configbyte[0] >>> 4) & 0x01);
			map.put("ESP", (configbyte[0] >>> 5) & 0x01);
			map.put("ESP标定", (configbyte[0] >>> 5) & 0x01);
			//map.put("EPB", (configbyte[0] >>> 6) & 0x01);
			map.put("TPMS", (configbyte[1] >>> 0) & 0x01);
			map.put("RRM", ((configbyte[1] >>> 1) & 0x01) + 1); //RRM特殊
			map.put("SAM", (configbyte[1] >>> 3) & 0x01);
			map.put("SAM标定", (configbyte[1] >>> 3) & 0x01);
			map.put("APM", (configbyte[1] >>> 4) & 0x01); //集成APM
			map.put("GBC", (configbyte[1] >>> 7) & 0x01);
			map.put("GSM", (configbyte[2] >>> 0) & 0x01);
			map.put("PLG", (configbyte[2] >>> 3) & 0x01);
			map.put("WPC", (configbyte[3] >>> 4) & 0x01);
			map.put("BM", (configbyte[3] >>> 5) & 0x01);
			map.put("PEPS", (configbyte[3] >>> 7) & 0x01);
			if((((configbyte[5] >>> 1) & 0x0F) > 0) && (((configbyte[8] >>> 6) & 0x01) == 0))
				map.put("RADAR", 0x01);
			map.put("TBOX", (configbyte[5] >>> 5) & 0x01);
			map.put("EPB_D", (configbyte[6] >>> 1) & 0x01);
			if(((configbyte[0] >>> 6) & 0x01) == 1 && ((configbyte[6] >>> 1) & 0x01) == 0)
			{
				map.put("EPB", (configbyte[0] >>> 6) & 0x01);
				map.put("EPB标定", (configbyte[0] >>> 6) & 0x01);
			}
			map.put("AVM", (configbyte[7] >>> 2) & 0x01);
			map.put("APM_D", (configbyte[7] >>> 3) & 0x01); //独立APM
			map.put("BSD", (configbyte[7] >>> 5) & 0x01);
			map.put("FWS", (configbyte[7] >>> 6) & 0x01);
			map.put("CEM", (configbyte[7] >>> 7) & 0x01);
			map.put("ACC", (configbyte[8] >>> 4) & 0x01); //
			map.put("AEB", (configbyte[8] >>> 4) & 0x01); //
			map.put("APA", (configbyte[8] >>> 6) & 0x01);
			map.put("FRM", (configbyte[9] >>> 4) & 0x01);
			map.put("FRM刷写",(configbyte[9] >>> 4) & 0x01);
			map.put("FCM", (configbyte[9] >>> 5) & 0x01);
			map.put("FCM刷写",(configbyte[9] >>> 5) & 0x01);
			map.put("CLM", (configbyte[9] >>> 6) & 0x01);
			map.put("FIPM", (configbyte[9] >>> 7) & 0x01);
			map.put("RIPM", (configbyte[10] >>> 0) & 0x01);
			map.put("DVR", (configbyte[10] >>> 1) & 0x01);
			map.put("CGW", (configbyte[10] >>> 2) & 0x01);
			map.put("AMP", (configbyte[10] >>> 3) & 0x01);
			map.put("ICM", (configbyte[10] >>> 4) & 0x01);
			map.put("SEAT", (configbyte[17] >>> 2) & 0x01);
			map.put("福瑞泰克FCM标定", 0x01);
			map.put("HAVM", (configbyte[19] >>> 0) & 0x01);
			map.put("DCDC", (configbyte[19] >>> 1) & 0x01);
			map.put("BSG", (configbyte[19] >>> 2) & 0x01);
			map.put("BMS", (configbyte[19] >>> 3) & 0x01);
			map.put("EGSM", (configbyte[19] >>> 7) & 0x01);
			if(((configbyte[22] >>> 7) & 0x01) > 0)
			{
				map.put("DCT", 0x02);
				map.put("TCU", 0x01);
			}
		}
		else if (carmode_dir.equals("KX63A"))
		{
			int configlen = Commonfunc.CheryCmdStringToBytes(config,configbyte, config.length());
			//配置
			map.put("EMS", 1);
			map.put("ABM", (configbyte[0] >>> 0) & 0x01);
			map.put("IMMO", (configbyte[0] >>> 1) & 0x01);
			map.put("EPS", (configbyte[0] >>> 2) & 0x01);
			map.put("EPS标定", (configbyte[0] >>> 2) & 0x01);
			map.put("TCM", (configbyte[0] >>> 3) & 0x01);
			map.put("TCU", (configbyte[0] >>> 3) & 0x01);
			if((((configbyte[2] >>> 5) & 0x07) == 5) && (((configbyte[0] >>> 3) & 0x01) == 0))
				map.put("TCU", 0x01);
			map.put("ABS", (configbyte[0] >>> 4) & 0x01);
			map.put("ESP", (configbyte[0] >>> 5) & 0x01);
			map.put("ESP标定", (configbyte[0] >>> 5) & 0x01);
			map.put("EPB", (configbyte[0] >>> 6) & 0x01);
			map.put("EPB标定", (configbyte[0] >>> 6) & 0x01);
			map.put("TPMS", (configbyte[1] >>> 0) & 0x01);
			map.put("RRM", ((configbyte[1] >>> 1) & 0x01) + 1); //RRM特殊
			map.put("SAM", (configbyte[1] >>> 3) & 0x01);
			map.put("SAM标定", (configbyte[1] >>> 3) & 0x01);
			map.put("APM", (configbyte[1] >>> 4) & 0x01); //集成APM
			map.put("GBC", (configbyte[1] >>> 7) & 0x01);
			map.put("GSM", (configbyte[2] >>> 0) & 0x01);
			map.put("PLG", (configbyte[2] >>> 3) & 0x01);
			map.put("WPC", (configbyte[3] >>> 4) & 0x01);
			map.put("BM", (configbyte[3] >>> 5) & 0x01);
			map.put("PEPS", (configbyte[3] >>> 7) & 0x01);
			map.put("TBOX", (configbyte[5] >>> 5) & 0x01);
			map.put("EPB", (configbyte[6] >>> 1) & 0x01);
			map.put("AVM", (configbyte[7] >>> 2) & 0x01);
			map.put("APM_D", (configbyte[7] >>> 3) & 0x01); //独立APM
			map.put("BSD", (configbyte[7] >>> 5) & 0x01);
			map.put("FWS", (configbyte[7] >>> 6) & 0x01);
			map.put("BDM", (configbyte[7] >>> 7) & 0x01);
			map.put("ACC", (configbyte[8] >>> 4) & 0x01); //
			map.put("AEB", (configbyte[8] >>> 4) & 0x01); //
			map.put("APA", (configbyte[8] >>> 6) & 0x01);
			map.put("FRM", (configbyte[9] >>> 4) & 0x01);
			map.put("FCM", (configbyte[9] >>> 5) & 0x01);
			map.put("CLM", (configbyte[9] >>> 6) & 0x01);
			map.put("FIPM", (configbyte[9] >>> 7) & 0x01);
			map.put("RIPM", (configbyte[10] >>> 0) & 0x01);
			map.put("DVR", (configbyte[10] >>> 1) & 0x01);
			map.put("CGW", (configbyte[10] >>> 2) & 0x01);
			map.put("AMP", (configbyte[10] >>> 3) & 0x01);
			map.put("ICM", (configbyte[10] >>> 4) & 0x01);

		}
		else if (carmode_dir.equals("JX65"))
		{
			int configlen = Commonfunc.CheryCmdStringToBytes(config,configbyte, config.length());
			//配置
			map.put("EMS", 1);
			if(Common.cartype.mesinfo.flash_ems != null)
			{
				if(Common.cartype.mesinfo.flash_ems.length() < 5)
					map.put("EMS刷写",0);
				else
				{
					if(Common.cartype.mesinfo.flash_ems.indexOf("800400008027FFFF") > 0)
						map.put("EMS刷写",1);
					else if(Common.cartype.mesinfo.flash_ems.indexOf("0x9000000") > 0)
						map.put("EMS刷写",2);
					else if(Common.cartype.mesinfo.flash_ems.indexOf("0x80080000") > 0)
						map.put("EMS刷写",3);
					else  //海外车型按另一种方式判断：6D的是UP8,7D的是ME178.1
					{
						String v_car = Common.cartype.mesinfo.getCarType();
						if(v_car.indexOf("6D") > 0)
							map.put("EMS刷写",2);
						else
							map.put("EMS刷写",1);
					}

				}
			}
			map.put("ABM", (configbyte[0] >>> 0) & 0x01);
			map.put("IMMO", (configbyte[0] >>> 1) & 0x01);
			map.put("EPS", (configbyte[0] >>> 2) & 0x01);
			map.put("EPS标定", (configbyte[0] >>> 2) & 0x01);
			map.put("TCM", (configbyte[0] >>> 3) & 0x01);
			map.put("TCU", (configbyte[0] >>> 3) & 0x01);
			if((((configbyte[2] >>> 5) & 0x07) == 5))
			{
				map.put("DCT", 0x01);
				map.put("TCU", 0x01);
				map.put("TCU刷写", 0x01);
			}
			if(((configbyte[22] >>> 7) & 0x01) > 0)
			{
				map.put("DCT", 0x02);
				map.put("TCU", 0x01);
				map.put("TCU刷写", 0x01);
			}
			if(((configbyte[37] >>> 5) & 0x01) == 1)
				map.put("TCU刷写", 0x02);
			map.put("ABS", (configbyte[0] >>> 4) & 0x01);
			map.put("ESP", (configbyte[0] >>> 5) & 0x01);
			map.put("ESP标定", (configbyte[0] >>> 5) & 0x01);
			map.put("EPB", (configbyte[0] >>> 6) & 0x01);
			if(((configbyte[7] >>> 0) & 0x01) == 0x01)
				map.put("EPB", 0);
			map.put("TPMS", (configbyte[1] >>> 0) & 0x01);
			map.put("IHU", ((configbyte[1] >>> 1) & 0x01) + 1); //RRM特殊
			map.put("SAM", (configbyte[1] >>> 3) & 0x01);
			map.put("SAM标定", (configbyte[1] >>> 3) & 0x01);
			map.put("APM", (configbyte[1] >>> 4) & 0x01); //集成APM
			map.put("GBC", (configbyte[1] >>> 7) & 0x01);
			map.put("GSM", (configbyte[2] >>> 0) & 0x01);
			map.put("PLG", (configbyte[2] >>> 3) & 0x01);
			map.put("WPC", (configbyte[3] >>> 4) & 0x01);
			map.put("RFR", (configbyte[3] >>> 5) & 0x01);
			map.put("PEPS", (configbyte[3] >>> 7) & 0x01);
			if((((configbyte[5] >>> 1) & 0x0F) > 0) && (((configbyte[8] >>> 6) & 0x01) == 0))
				map.put("RADAR", 0x01);
			map.put("TBOX", (configbyte[5] >>> 5) & 0x01);
			map.put("EPB_D", (configbyte[6] >>> 1) & 0x01);
			if(((configbyte[0] >>> 6) & 0x01) == 1 && ((configbyte[6] >>> 1) & 0x01) == 0)
			{
				map.put("EPB", (configbyte[0] >>> 6) & 0x01);
				map.put("EPB标定", (configbyte[0] >>> 6) & 0x01);
			}
			else
			{
				map.put("EPB", 0);
			}
			map.put("AVM", (configbyte[7] >>> 2) & 0x01);
			map.put("APM_D", (configbyte[7] >>> 3) & 0x01); //独立APM
			map.put("BSD", (configbyte[7] >>> 5) & 0x01);
			map.put("FWS", (configbyte[7] >>> 6) & 0x01);
			map.put("CEM", (configbyte[7] >>> 7) & 0x01);

			map.put("APA", (configbyte[32] >>> 0) & 0x01);
			map.put("FRM", (configbyte[32] >>> 1) & 0x01);
			map.put("FRM刷写",(configbyte[32] >>> 1) & 0x01);
			map.put("FCM", (configbyte[32] >>> 2) & 0x01);
			map.put("FCM刷写",(configbyte[32] >>> 2) & 0x01);
			map.put("CLM", (configbyte[32] >>> 3) & 0x01);
			/*
			map.put("FIPM", (configbyte[9] >>> 7) & 0x01);
			map.put("RIPM", (configbyte[10] >>> 0) & 0x01);
			map.put("DVR", (configbyte[10] >>> 1) & 0x01);
			map.put("CGW", (configbyte[10] >>> 2) & 0x01);
			map.put("AMP", (configbyte[10] >>> 3) & 0x01);
			map.put("ICM", (configbyte[10] >>> 4) & 0x01);
			map.put("SEAT", (configbyte[17] >>> 2) & 0x01);
			map.put("福瑞泰克FCM标定", 0x01);
			map.put("AVM", (configbyte[19] >>> 0) & 0x01);
			map.put("DCDC", (configbyte[19] >>> 1) & 0x01);
			map.put("BSG", (configbyte[19] >>> 2) & 0x01);
			map.put("BMS", (configbyte[19] >>> 3) & 0x01);
			map.put("EGSM", (configbyte[19] >>> 7) & 0x01);
			map.put("6DCT", (configbyte[22] >>> 7) & 0x01);
			map.put("7DCT", (configbyte[23] >>> 3) & 0x07);
			*/
			map.put("RBCM", (configbyte[32] >>> 4) & 0x01);
			map.put("AVC1", (configbyte[32] >>> 5) & 0x01);
			map.put("AVC2", (configbyte[32] >>> 6) & 0x01);
			map.put("DHM", (configbyte[32] >>> 7) & 0x01);
			map.put("WSD", (configbyte[33] >>> 0) & 0x01);
			map.put("HUD", (configbyte[33] >>> 1) & 0x01);
			map.put("MFS", (configbyte[33] >>> 2) & 0x01);
			map.put("ZDC", (configbyte[33] >>> 3) & 0x01);
			map.put("RadFR", (configbyte[33] >>> 4) & 0x01);
			map.put("RadFL", (configbyte[33] >>> 5) & 0x01);
			map.put("RadRL", (configbyte[33] >>> 6) & 0x01);
			map.put("RadRR", (configbyte[33] >>> 7) & 0x01);
			map.put("VIUL", (configbyte[34] >>> 0) & 0x01);
			map.put("VIUR", (configbyte[34] >>> 1) & 0x01);
			map.put("UVC", (configbyte[34] >>> 2) & 0x01);
			map.put("IMU", (configbyte[34] >>> 3) & 0x01);
			map.put("ABM标定", (configbyte[34] >>> 3) & 0x01);
			map.put("HCU", (configbyte[34] >>> 4) & 0x01);
			map.put("ISG", (configbyte[34] >>> 5) & 0x01);

			map.put("RadFC", (configbyte[34] >>> 7) & 0x01);
			map.put("RLC", (configbyte[35] >>> 0) & 0x01);
			map.put("FIPM", (configbyte[35] >>> 1) & 0x01);
			map.put("RIPM", (configbyte[35] >>> 2) & 0x01);
			map.put("DVR", (configbyte[35] >>> 3) & 0x01);
			map.put("CGW", (configbyte[35] >>> 4) & 0x01);
			map.put("AMP", (configbyte[35] >>> 5) & 0x01);
			map.put("ICM", (configbyte[35] >>> 6) & 0x01);
			map.put("SEAT", (configbyte[35] >>> 7) & 0x01);

			map.put("AVM", (configbyte[36] >>> 0) & 0x01);
			map.put("DCDC", (configbyte[36] >>> 1) & 0x01);
			map.put("BSG", (configbyte[36] >>> 2) & 0x01);
			map.put("BMS", (configbyte[36] >>> 3) & 0x01);
			map.put("EGSM", (configbyte[36] >>> 4) & 0x01);
			map.put("6DCT", (configbyte[36] >>> 5) & 0x01);
			map.put("7DCT", (configbyte[36] >>> 6) & 0x07);
			if((configbyte[37] &0x1F) == 0)
				map.put("EBS", 0);
			else
				map.put("EBS", 1);
			map.put("GLONASS", (configbyte[39] >>> 0) & 0x01);
			map.put("ECALL", (configbyte[39] >>> 1) & 0x01);
		}
		else if (carmode_dir.equals("JX65PHEV"))
		{
			int configlen = Commonfunc.CheryCmdStringToBytes(config,configbyte, config.length());
			//配置
			map.put("EMS", 1);
			if(Common.cartype.mesinfo.flash_ems == null) Common.cartype.mesinfo.flash_ems = "";
			if(Common.cartype.mesinfo.flash_ems.length() < 5)
				map.put("EMS刷写",0);
			else
				map.put("EMS刷写",1);
			map.put("ABM", (configbyte[0] >>> 0) & 0x01);
			map.put("IMMO", (configbyte[0] >>> 1) & 0x01);
			map.put("EPS", (configbyte[0] >>> 2) & 0x01);
			map.put("EPS标定", (configbyte[0] >>> 2) & 0x01);
			map.put("TCM", (configbyte[0] >>> 3) & 0x01);
			map.put("TCU", (configbyte[0] >>> 3) & 0x01);
			map.put("TCU刷写", (configbyte[0] >>> 3) & 0x01);
			if(((configbyte[0] >>> 3) & 0x01) == 1)
			{
				if(((configbyte[36] >>> 5) & 0x07) == 2)
					map.put("TCU", 3);
				if(((configbyte[37] >>> 6) & 0x03) == 2)
					map.put("TCU", 3);
			}

			map.put("ABS", (configbyte[0] >>> 4) & 0x01);
			map.put("ESP", (configbyte[0] >>> 5) & 0x01);
			map.put("ESP标定", (configbyte[0] >>> 5) & 0x01);
			map.put("EPB", (configbyte[0] >>> 6) & 0x01);

			map.put("TPMS", (configbyte[1] >>> 0) & 0x01);
			map.put("IHU", ((configbyte[1] >>> 1) & 0x01) + 1); //RRM特殊

			map.put("SAM", (configbyte[1] >>> 3) & 0x01);
			map.put("SAM标定", (configbyte[1] >>> 3) & 0x01);
			map.put("APM", (configbyte[1] >>> 4) & 0x01); //集成APM
			map.put("GBC", (configbyte[1] >>> 7) & 0x01);
			map.put("GSM", (configbyte[2] >>> 0) & 0x01);
			map.put("PLG", (configbyte[2] >>> 3) & 0x01);
			map.put("WPC", (configbyte[3] >>> 4) & 0x01);
			map.put("RFR", (configbyte[3] >>> 5) & 0x01);
			map.put("PEPS", (configbyte[3] >>> 7) & 0x01);
			if((((configbyte[5] >>> 1) & 0x0F) > 0) && (((configbyte[8] >>> 6) & 0x01) == 0))
				map.put("RADAR", 0x01);
			map.put("TBOX", (configbyte[5] >>> 5) & 0x01);
			map.put("EPB_D", (configbyte[6] >>> 1) & 0x01);
			if(((configbyte[0] >>> 6) & 0x01) == 1 && ((configbyte[6] >>> 1) & 0x01) == 0)
			{
				map.put("EPB", 1);
				map.put("EPB标定", 1);
			}
			else
			{
				map.put("EPB", 0);
			}
			map.put("AVM", (configbyte[7] >>> 2) & 0x01);
			map.put("APM_D", (configbyte[7] >>> 3) & 0x01); //独立APM
			map.put("BSD", (configbyte[7] >>> 5) & 0x01);
			map.put("FWS", (configbyte[7] >>> 6) & 0x01);
			map.put("CEM", (configbyte[7] >>> 7) & 0x01);

			map.put("APA", (configbyte[32] >>> 0) & 0x01);
			map.put("FCM", (configbyte[32] >>> 2) & 0x01);
			map.put("FCM刷写",(configbyte[32] >>> 2) & 0x01);
			map.put("CLM", (configbyte[32] >>> 3) & 0x01);

			map.put("ACC", (configbyte[8] >>> 4) & 0x01);
			map.put("AEB", (configbyte[8] >>> 4) & 0x01);
			map.put("LKA", (configbyte[8] >>> 5) & 0x01);

			//map.put("APA", (configbyte[32] >>> 0) & 0x01);
			//map.put("FRM", (configbyte[9] >>> 4) & 0x01);
			//map.put("FCM", (configbyte[32] >>> 2) & 0x01);
			//map.put("FCM刷写",(configbyte[32] >>> 2) & 0x01);
			//map.put("CLM", (configbyte[32] >>> 3) & 0x01);
			//map.put("FIPM", (configbyte[9] >>> 7) & 0x01);
			//map.put("RIPM", (configbyte[10] >>> 0) & 0x01);
			//map.put("DVR", (configbyte[10] >>> 1) & 0x01);
			//map.put("CGW", (configbyte[10] >>> 2) & 0x01);
			//map.put("AMP", (configbyte[10] >>> 3) & 0x01);
			//map.put("ICM", (configbyte[10] >>> 4) & 0x01);
			//map.put("IMU", (configbyte[13] >>> 3) & 0x01);
			//map.put("SEAT", (configbyte[17] >>> 2) & 0x01);
			//map.put("福瑞泰克FCM标定", 0x01);
			//map.put("AVM", (configbyte[19] >>> 0) & 0x01);
			//map.put("DCDC", (configbyte[19] >>> 1) & 0x01);
			//map.put("MCUF", (configbyte[19] >>> 2) & 0x01);
			//map.put("BMS", (configbyte[19] >>> 3) & 0x01);
			//map.put("EGSM", (configbyte[19] >>> 7) & 0x01);
			//if((configbyte[37] &0x1F) == 0)
			//	map.put("EBS", 0);
			//	else
			//	map.put("EBS", 1);
			//map.put("6DCT", (configbyte[37] >>> 5) & 0x01);
			//map.put("7DCT", (configbyte[36] >>> 5) & 0x07);

			map.put("RBCM", (configbyte[32] >>> 4) & 0x01);
			map.put("AVC1", (configbyte[32] >>> 5) & 0x01);
			map.put("AVC2", (configbyte[32] >>> 6) & 0x01);
			map.put("DHM", (configbyte[32] >>> 7) & 0x01);
			map.put("WSD", (configbyte[33] >>> 0) & 0x01);
			map.put("HUD", (configbyte[33] >>> 1) & 0x01);
			//map.put("MFS", (configbyte[33] >>> 2) & 0x01);
			map.put("MDC", (configbyte[33] >>> 3) & 0x01);
			map.put("RadFR", (configbyte[33] >>> 4) & 0x01);
			map.put("RadFL", (configbyte[33] >>> 5) & 0x01);
			map.put("RadRL", (configbyte[33] >>> 6) & 0x01);
			map.put("RadRR", (configbyte[33] >>> 7) & 0x01);

			map.put("VIUL", (configbyte[34] >>> 0) & 0x01);
			map.put("VIUR", (configbyte[34] >>> 1) & 0x01);
			//map.put("UVC", (configbyte[34] >>> 2) & 0x01);
			map.put("IMU", (configbyte[34] >>> 3) & 0x01);
			map.put("ABM标定", (configbyte[34] >>> 3) & 0x01);
			map.put("HCU", (configbyte[34] >>> 4) & 0x01);
			map.put("ISG", (configbyte[34] >>> 5) & 0x01);
			map.put("RLC", (configbyte[35] >>> 0) & 0x01);
			map.put("CGW", (configbyte[35] >>> 4) & 0x01);
			map.put("ICM", (configbyte[35] >>> 6) & 0x01);
			map.put("SEAT", (configbyte[35] >>> 7) & 0x01);
			map.put("HAVM", (configbyte[36] >>> 0) & 0x01);
			map.put("DCDC", (configbyte[36] >>> 1) & 0x01);
			map.put("BSG", (configbyte[36] >>> 2) & 0x01);
			map.put("MCUF", (configbyte[36] >>> 2) & 0x01);
			map.put("BMS", (configbyte[36] >>> 3) & 0x01);
			map.put("EGSM", (configbyte[36] >>> 4) & 0x01);
			map.put("PTC", (configbyte[38] >>> 0) & 0x01);

		}
		else if (carmode_dir.equals("燃料电池新能源"))
		{
			map.put("下线检测", 1);

		}
		else if (carmode_dir.equals("KQ71EV"))
		{
			int configlen = Commonfunc.CheryCmdStringToBytes(config,configbyte, config.length());
			//配置
			if(((configbyte[0] >>> 7) & 0x01) == 0)
				map.put("VCU", 1);
			if(((configbyte[1] >>> 0) & 0x01) == 0)
				map.put("BMS", 1);
			if(((configbyte[1] >>> 1) & 0x01) == 0)
				map.put("MCU", 1);
			if(((configbyte[1] >>> 2) & 0x01) == 0)
				map.put("OBC", 1);
			if(((configbyte[1] >>> 3) & 0x01) == 0)
				map.put("ABS", 1);
			if(((configbyte[1] >>> 4) & 0x01) == 0)
				map.put("TBOX", 1);
			if(((configbyte[1] >>> 5) & 0x01) == 0)
				map.put("ICM", 1);
			if(((configbyte[1] >>> 6) & 0x01) == 0)
				map.put("BCM", 1);
			if(((configbyte[1] >>> 7) & 0x01) == 0)
				map.put("EPS", 1);

		}
		SimpleDateFormat tempDate = new SimpleDateFormat("yyyyMMdd");
		Date v_datetime = new java.util.Date();
		this.date = tempDate.format(v_datetime).toString();
		Commonfunc.StringToBytes(this.date, this.time, 4);
	}

	public void setVin(String Pvin)
	{
		vin = Pvin.getBytes();
	}
	public String SetRepairIstep(String Pfunction, Context context) //返修模式设置文件,返回函数
	{
		String funcname = "";
		if(OptMode != 1) return funcname;
		try {
			if(Pfunction.contains(context.getResources().getString(R.string.Offline)))  //
				station = 0;
			else if(Pfunction.contains(context.getResources().getString(R.string.Calibration)))
				station = 1;
			else if(Pfunction.contains(context.getResources().getString(R.string.report_transfer)))
				station = 2;
			else if(Pfunction.contains(context.getResources().getString(R.string.falsh_write)))
				station = 3;
//			else if(Pfunction.indexOf("EMS刷写") >= 0)
//				station = 3;
			else if(Pfunction.contains(context.getResources().getString(R.string.rework_station)))
				station = 4;
			else
				return funcname;
			//解析名字
			int adr = Pfunction.indexOf("->");
			funcname = Pfunction.substring(adr + 2);
			istep = new Ini(new File(ConfigFileLoadUtil.getStepFilePath(station, carmode_dir)));

		} catch (InvalidFileFormatException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		return funcname;
	}
	public void setTime(byte[] Ptime)
	{
		System.arraycopy(Ptime, 0, time, 0, 4);
	}
	public void setPin(byte[] Ppin)
	{
		pin = Ppin;
	}
	public int getMap(String Pdata)
	{
		if(map.get(Pdata) == null)
			return 0;
		else
			return map.get(Pdata);
	}
	public void putMap(String str,int val)
	{
		map.put(str, val);
	}
	public String getMapStr(String Pdata)
	{
		return map_ver_str.get(Pdata);
	}
	public void putMapStr(String str,String value)
	{
		map_ver_str.put(str, value);
	}
	public void putMapbyte(String str,byte [] value)
	{
		map_write_byte.put(str, value);
	}
	public byte[] getMapByte(String str)
	{
		return map_write_byte.get(str);
	}
	public void putMapDTCEnable(String str,byte [] value)
	{
		map_dtcenable_byte.put(str, value);
	}
	public byte[] getMapDTCEnable(String str)
	{
		return map_dtcenable_byte.get(str);
	}
	public int getModuleIdReq(String Pname)
	{
		Pname = Pname.substring(0, Pname.length() - 1);
		for(Ecu ecu : ecus){
			if(ecu.getecuName().equals(Pname))
				return ecu.getreqid();
		}
		return 0;
	}
	public int getModuleIdRes(String Pname)
	{
		Pname = Pname.substring(0, Pname.length() - 1);
		for(Ecu ecu : ecus){
			if(ecu.getecuName().equals(Pname))
				return ecu.getresid();
		}
		return 0;
	}
}
